package com.it.d3_final;

public class Test {
    /**
     * 常量： public static final 修饰的成员变量，建议名称全部大写，多个单词以下划线连接
     */
    public static final String SCHOOL_NAME = "黑马"; // 静态成员变量

    private final String name = "猪八戒"; // 实例成员变量 //这种用法没有意义，知道就行

    public static void main(String[] args) {

        // 目标：认识final的作用

//        注意一：final 修饰基本类型的变量，变量存储的数据类型不能被改变

        // 3.final 可以修饰变量总规则：有且仅能赋值一次
        /*
         * 变量：
         *   一、局部变量
         *   二、成员变量（全局）
         *       1.静态成员变量
         *       2.实例成员变量
         */

        final int a;
        a = 12;
        // a=13; // 第二次赋值，出错了

        final double r = 3.14;
        // r= 0.1; // 第二次赋值，出错了

//        schoolName = "即可"; // 第二次赋值，出错了

        Test t = new Test();
//        t.name = "孙悟空"; // 第二次赋值，出错了


        // 注意二： final 修饰引用类型的变量，变量存储的地址不能被改变，但地址所指向对象的内容是可以被改变的
        final int[] arr = {11, 22, 33};
        // arr = null; // 第二次赋值，出错了 ,地址改变了
        arr[1] = 222;

    }

    public static void buy(final double z) {
//        z = 0.1; // 第二次赋值，出错了
    }
}

// 1. final修饰类，类不能被继承 （一般工具类会加final修饰)
final class A {
}
//class B extends A{}


// 2.final 修饰方法，方法不能被重写
class C {
    public final void test() {

    }
}

class D extends C {
//    @Override
//    public void test() {
//        super.test();
//    }
}